import { get, post, request } from '../request.js'
import { getBaseURL } from '../config.js'

// 视频分析相关API

/**
 * 上传视频进行分析
 * @param {FormData} formData 包含视频文件的表单数据
 * @param {File} formData.video 视频文件
 * @param {number} formData.userId 用户ID
 * @param {string} [formData.sportType='general'] 运动类型
 * @returns {Promise}
 */
export const uploadAndAnalyze = (formData) => {
    return request({
        url: '/video/upload',
        method: 'POST',
        data: formData,
        headers: {
            'Content-Type': 'multipart/form-data'
        }
    })
}

/**
 * 获取详细分析结果
 * @param {string} resultId 分析结果ID
 * @param {Object} params 查询参数
 * @param {number} params.userId 用户ID
 * @param {string} [params.sportType='general'] 运动类型
 * @returns {Promise}
 */
export const getDetailedAnalysisResult = (resultId, params) => {
    return get(`/video/result/${resultId}`, { params })
}

/**
 * 获取视频流数据并创建blob URL
 * @param {string} resultId 分析结果ID
 * @returns {Promise<string>} 返回blob URL
 */
export const getVideoPlayUrl = async (resultId) => {
    try {
        // 检查是否在H5环境中
        // #ifdef H5
        // 通过带认证的API请求获取视频数据
        const response = await request({
            url: `/video/play/${resultId}`,
            method: 'GET',
            responseType: 'arraybuffer', // 获取二进制数据
        })
        
        // 创建blob对象
        const blob = new Blob([response], { type: 'video/mp4' })
        
        // 创建blob URL
        const blobUrl = URL.createObjectURL(blob)
        
        return blobUrl
        // #endif
        
        // #ifndef H5
        // 在非H5环境中，直接返回带token的URL
        const baseURL = getBaseURL()
        const token = uni.getStorageSync('accessToken')
        let url = `${baseURL}/video/play/${resultId}`
        
        if (token) {
            url += `?token=${encodeURIComponent(token)}`
        }
        
        return url
        // #endif
    } catch (error) {
        console.error('获取视频失败:', error)
        throw error
    }
}



/**
 * 获取用户的所有分析结果
 * @param {number} userId 用户ID
 * @returns {Promise}
 */
export const getUserAnalysisResults = (userId) => {
    return get(`/video/user/${userId}/results`)
}

/**
 * 检查分析状态
 * @param {string} resultId 分析结果ID
 * @param {Object} params 查询参数
 * @param {number} params.userId 用户ID
 * @returns {Promise}
 */
export const checkAnalysisStatus = (resultId, params) => {
    return get(`/video/status/${resultId}`, { params })
}

/**
 * 下载分析结果视频
 * @param {string} resultId 分析结果ID
 * @returns {Promise}
 */
export const downloadResultVideo = (resultId) => {
    return request({
        url: `/video/play/${resultId}`,
        method: 'GET',
        responseType: 'blob'
    })
}

// 默认导出所有视频分析相关API
export default {
    uploadAndAnalyze,
    getDetailedAnalysisResult,
    getVideoPlayUrl,
    getUserAnalysisResults,
    checkAnalysisStatus,
    downloadResultVideo
}